package com.diandiji.demo.controller;


import com.diandiji.demo.config.JwtConfig;
import com.diandiji.demo.entity.User;
import com.diandiji.demo.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

//用户控制层

@RestController  //描述控制层(Controller)并返回JSON数据类型，但不会再执行配置的视图解析器，也不会返回给jsp页面，返回值就是return里的内容。
                 //该注解等同于：@Controller + @ResponseBody
@RequestMapping("/User")    //@RequestMapping("/xxx") 注解类上 通过"/xxx"来指定控制器可以处理哪些URL请求。
public class UserController {
    @Resource    //@Resource 按byName自动注入 获取对应的bean对象
    private UserService userService;


    @PostMapping("/login")
    public Map<String, Object> login(@RequestBody User user) {
        User dbUser = userService.findByAccount(user.getAccount());
        Map<String, Object> result = new HashMap<>();

        if (dbUser == null) {
            result.put("code", 404);
            result.put("message", "账号不存在");
            return result;
        }

        if (!dbUser.getPassword().equals(user.getPassword())) {
            result.put("code", 401);
            result.put("message", "密码错误");
            return result;
        }

        // 生成 JWT Token
        String token = JwtConfig.generateToken(dbUser);
        result.put("code", 200);
        result.put("token", token);
        result.put("user", dbUser);
        return result;
    }

    @GetMapping("/{username}/{userID}")  //@GetMapping 注解的主要作用是将 HTTP GET 请求映射到特定的处理方法上。当客户端
    // 向服务器发送一个 GET请求时，Spring MVC 会根据请求的 URL 路径找到使用 @GetMapping 注解标记的方法，并执行该方法来处理请求。
    public String getusername(@PathVariable("username") String username,@PathVariable("userID") int userID){
        //@PathVariable用于从请求的 URL 路径里提取变量值，并将其绑定到控制器方法的参数上。
        return "用户名："+username+","+"用户ID："+userID;
    }
    //获取所有用户信息
    @GetMapping("/all") // 处理GET请求，路径为 "/User/all"
    public String getAllUsers() {
        // 调用UserService的queryAllUser方法获取所有用户信息
        return userService.queryAllUser();
    }
    //根据用户ID获取用户信息
    @GetMapping("/{userID}") // 处理GET请求，路径为 "/User/{userID}"
    public User getUserById(@PathVariable("userID") int userID) {
        // 调用UserService的方法，根据用户ID获取用户信息
        return userService.queryUserById(userID);
    }

     //添加用户
    @PostMapping("/add") // 处理POST请求，路径为 "/User/add"
    public User addUser(@RequestBody User user) {
        System.out.println("接收到的用户数据：" + user.getUsername() + ", " + user.getAccount());
        // 调用UserService的方法，添加用户
        return userService.addUser(user);
    }

     // 更新用户信息
    @PutMapping("/update/{userID}") // 处理PUT请求，路径为 "/User/update/{userID}"
    public User updateUser(@PathVariable("userID") int userID, @RequestBody User user) {
        // 调用UserService的方法，更新用户信息
        user.setUserID(userID); // 确保用户ID一致
        return userService.updateUser(user);
    }

     //删除用户
    @DeleteMapping("/delete/{userID}") // 处理DELETE请求，路径为 "/User/delete/{userID}"
    public String deleteUser(@PathVariable("userID") int userID) {
        // 调用UserService的方法，删除用户
        userService.deleteUserByID(userID);
        return "用户删除成功，用户ID：" + userID;
    }

    @GetMapping ("/find/{account}")
    public User findByAccount(@PathVariable ("account") String account){
        return userService.findByAccount(account);
    }
}
